// v1
function g(id) {
  return document.getElementById(id);
}
function css(id, key, value) {
  g(id).style[key] = value;
}
function attr(id, key, value) {
  g(id)[key] = value;
}
function html(id, value) {
  g(id).innerHTML = value;
}
function on(id, type, fn) {
  g(id)[on + type] = fn;
}


// v2 加入命名空间
var Ming = {
  g(id) {
    return document.getElementById(id);
  },
  css(id, key, value) {
    this.g(id).style[key] = value;
  },
  // ...
}


// v3 创建小型代码库
var A = {
  Util: {
    util_method1() {},
    util_methods2() {}
    // ...
  },
  Tool: {
    tool_method1() {},
    tool_method2() {}
    // ...
  },
  Ajax: {
    get() {},
    post() {}
    // ...
  },
  other: {
    // ...
  }
}
// 调用
A.Util.util_method1();
A.Tool.tool_method1();
.Ajax.get();


// v4 无法修改的静态变量（利用闭包）
var Conf = (function() {
  // 私有变量
  var conf = {
    MAX_NUM: 100,
    MIN_NUM: 1,
    COUNT: 1000
  }
  // 返回取值器对象
  return {
    get: function(name) {
      return conf[name] ? conf[name] : null;
    }
  }
}());
var count = Conf.get('COUNT');
console.log(count); // 1000


// 惰性单例（懒汉式）
var LazySingle = (function() {
  // 单例实例引用
  var _instance = null;
  // 单例
  function Single() {
    /*这里定义私有属性和方法*/
    return {
      publicMethod: function() {},
      publicProperty: '1.0'
    }
  }
  return function() {
    // 如果未创建，则创建单例
    if (!_instance) {
      _instance = Single();
    }
    // 返回单例
    return _instance;
  }
}());
console.log(LazySingle().publicProperty); // 1.0
